@microsoft/omnichannel-chat-widget 0.1.0-main.bcfe8a3 → 0.1.0-main.cde77ea

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/lib/cjs/common/Constants.js +2 -0
  2. package/lib/cjs/common/telemetry/TelemetryConstants.js +4 -0
  3. package/lib/cjs/common/utils.js +48 -2
  4. package/lib/cjs/components/chatbuttonstateful/ChatButtonStateful.js +4 -0
  5. package/lib/cjs/components/confirmationpanestateful/ConfirmationPaneStateful.js +0 -1
  6. package/lib/cjs/components/headerstateful/HeaderStateful.js +2 -2
  7. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +23 -0
  8. package/lib/cjs/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  9. package/lib/cjs/components/livechatwidget/common/ChatAdapterShim.js +70 -0
  10. package/lib/cjs/components/livechatwidget/common/createAdapter.js +9 -1
  11. package/lib/cjs/components/livechatwidget/common/createMarkdown.js +31 -30
  12. package/lib/cjs/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +4 -1
  13. package/lib/cjs/components/livechatwidget/common/endChat.js +49 -17
  14. package/lib/cjs/components/livechatwidget/common/initWebChatComposer.js +8 -0
  15. package/lib/cjs/components/livechatwidget/common/reconnectChatHelper.js +15 -15
  16. package/lib/cjs/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +0 -4
  17. package/lib/cjs/components/livechatwidget/common/shareObservable.js +45 -0
  18. package/lib/cjs/components/livechatwidget/common/startChat.js +124 -84
  19. package/lib/cjs/components/livechatwidget/interfaces/IAuthProps.js +1 -0
  20. package/lib/cjs/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +92 -98
  21. package/lib/cjs/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +4 -8
  22. package/lib/cjs/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +1 -1
  23. package/lib/cjs/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  24. package/lib/cjs/contexts/common/ConversationState.js +3 -2
  25. package/lib/cjs/contexts/common/LiveChatWidgetContextInitialState.js +0 -1
  26. package/lib/cjs/controller/componentController.js +2 -2
  27. package/lib/esm/common/Constants.js +2 -0
  28. package/lib/esm/common/telemetry/TelemetryConstants.js +4 -0
  29. package/lib/esm/common/utils.js +36 -0
  30. package/lib/esm/components/chatbuttonstateful/ChatButtonStateful.js +4 -0
  31. package/lib/esm/components/confirmationpanestateful/ConfirmationPaneStateful.js +0 -1
  32. package/lib/esm/components/headerstateful/HeaderStateful.js +2 -2
  33. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.js +14 -0
  34. package/lib/esm/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.js +1 -0
  35. package/lib/esm/components/livechatwidget/common/ChatAdapterShim.js +59 -0
  36. package/lib/esm/components/livechatwidget/common/createAdapter.js +9 -2
  37. package/lib/esm/components/livechatwidget/common/createMarkdown.js +31 -30
  38. package/lib/esm/components/livechatwidget/common/defaultProps/dummyDefaultProps.js +4 -1
  39. package/lib/esm/components/livechatwidget/common/endChat.js +50 -18
  40. package/lib/esm/components/livechatwidget/common/initWebChatComposer.js +9 -2
  41. package/lib/esm/components/livechatwidget/common/reconnectChatHelper.js +17 -16
  42. package/lib/esm/components/livechatwidget/common/setPostChatContextAndLoadSurvey.js +0 -4
  43. package/lib/esm/components/livechatwidget/common/shareObservable.js +38 -0
  44. package/lib/esm/components/livechatwidget/common/startChat.js +125 -86
  45. package/lib/esm/components/livechatwidget/interfaces/IAuthProps.js +1 -0
  46. package/lib/esm/components/livechatwidget/livechatwidgetstateful/LiveChatWidgetStateful.js +92 -97
  47. package/lib/esm/components/prechatsurveypanestateful/PreChatSurveyPaneStateful.js +5 -8
  48. package/lib/esm/components/proactivechatpanestateful/ProactiveChatPaneStateful.js +1 -1
  49. package/lib/esm/components/webchatcontainerstateful/common/mockchatsdk.js +2 -0
  50. package/lib/esm/contexts/common/ConversationState.js +3 -2
  51. package/lib/esm/contexts/common/LiveChatWidgetContextInitialState.js +0 -1
  52. package/lib/esm/controller/componentController.js +2 -2
  53. package/lib/types/common/Constants.d.ts +1 -0
  54. package/lib/types/common/telemetry/TelemetryConstants.d.ts +4 -1
  55. package/lib/types/common/telemetry/TelemetryHelper.d.ts +1 -1
  56. package/lib/types/common/utils.d.ts +3 -0
  57. package/lib/types/components/footerstateful/downloadtranscriptstateful/DownloadTranscriptStateful.d.ts +1 -1
  58. package/lib/types/components/livechatwidget/common/ActivitySubscriber/DefaultActivitySubscriber.d.ts +5 -0
  59. package/lib/types/components/livechatwidget/common/ActivitySubscriber/IActivitySubscriber.d.ts +6 -0
  60. package/lib/types/components/livechatwidget/common/ChatAdapterShim.d.ts +7 -0
  61. package/lib/types/components/livechatwidget/common/endChat.d.ts +1 -1
  62. package/lib/types/components/livechatwidget/common/reconnectChatHelper.d.ts +5 -4
  63. package/lib/types/components/livechatwidget/common/setPostChatContextAndLoadSurvey.d.ts +1 -1
  64. package/lib/types/components/livechatwidget/common/shareObservable.d.ts +1 -0
  65. package/lib/types/components/livechatwidget/common/startChat.d.ts +4 -2
  66. package/lib/types/components/livechatwidget/common/startProactiveChat.d.ts +1 -1
  67. package/lib/types/components/livechatwidget/interfaces/IAuthProps.d.ts +4 -0
  68. package/lib/types/components/livechatwidget/interfaces/ILiveChatWidgetProps.d.ts +2 -0
  69. package/lib/types/components/reconnectchatpanestateful/interfaces/IReconnectChatPaneStatefulProps.d.ts +0 -1
  70. package/lib/types/components/webchatcontainerstateful/common/mockchatsdk.d.ts +1 -0
  71. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/activityMiddleware.d.ts +1 -1
  72. package/lib/types/components/webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/avatarMiddleware.d.ts +1 -1
  73. package/lib/types/contexts/common/ConversationState.d.ts +3 -2
  74. package/lib/types/contexts/common/ILiveChatWidgetContext.d.ts +0 -1
  75. package/package.json +1 -1
@@ -167,6 +167,8 @@ _defineProperty(Constants, "internetConnectionTestUrlText", "Omnichannel Connect
167
167
 
168
168
  _defineProperty(Constants, "ChatWidgetStateChangedPrefix", "ChatWidgetStateChanged");
169
169
 
170
+ _defineProperty(Constants, "PostChatLoadingDurationInMs", 2000);
171
+
170
172
  const Regex = (_class = class Regex {}, _defineProperty(_class, "EmailRegex", "(?:[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])"), _class);
171
173
  exports.Regex = Regex;
172
174
 
@@ -59,6 +59,7 @@ exports.BroadcastEvent = BroadcastEvent;
59
59
  BroadcastEvent["ChatInitiated"] = "ChatInitiated";
60
60
  BroadcastEvent["CloseChat"] = "CloseChat";
61
61
  BroadcastEvent["InitiateEndChatOnBrowserUnload"] = "InitiateEndChatOnBrowserUnload";
62
+ BroadcastEvent["ClosePopoutWindow"] = "ClosePopoutWindow";
62
63
  })(BroadcastEvent || (exports.BroadcastEvent = BroadcastEvent = {}));
63
64
 
64
65
  let TelemetryEvent;
@@ -140,6 +141,8 @@ exports.TelemetryEvent = TelemetryEvent;
140
141
  TelemetryEvent["AudioToggleButtonClicked"] = "AudioToggleButtonClicked";
141
142
  TelemetryEvent["SuppressBotMagicCodeSucceeded"] = "SuppressBotMagicCodeSucceeded";
142
143
  TelemetryEvent["SuppressBotMagicCodeFailed"] = "SuppressBotMagicCodeFailed";
144
+ TelemetryEvent["GetConversationDetailsException"] = "GetConversationDetailsException";
145
+ TelemetryEvent["BrowserUnloadEventStarted"] = "BrowserUnloadEventStarted";
143
146
  TelemetryEvent["ProcessingHTMLTextMiddlewareFailed"] = "ProcessingHTMLTextMiddlewareFailed";
144
147
  TelemetryEvent["ProcessingSanitizationMiddlewareFailed"] = "ProcessingSanitizationMiddlewareFailed";
145
148
  TelemetryEvent["FormatTagsMiddlewareJSONStringifyFailed"] = "FormatTagsMiddlewareJSONStringifyFailed";
@@ -211,6 +214,7 @@ class TelemetryConstants {
211
214
  case TelemetryEvent.MessageSent:
212
215
  case TelemetryEvent.MessageReceived:
213
216
  case TelemetryEvent.CustomContextReceived:
217
+ case TelemetryEvent.BrowserUnloadEventStarted:
214
218
  return ScenarioType.ACTIONS;
215
219
 
216
220
  case TelemetryEvent.StartChatSDKCall:
@@ -3,10 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.setTabIndices = exports.setFocusOnSendBox = exports.setFocusOnElement = exports.preventFocusToMoveOutOfElement = exports.parseAdaptiveCardPayload = exports.newGuid = exports.isNullOrUndefined = exports.isNullOrEmptyString = exports.getWidgetEndChatEventName = exports.getWidgetCacheId = exports.getTimestampHourMinute = exports.getLocaleDirection = exports.getIconText = exports.getDomain = exports.findParentFocusableElementsWithoutChildContainer = exports.findAllFocusableElement = exports.extractPreChatSurveyResponseValues = exports.escapeHtml = exports.createTimer = exports.changeLanguageCodeFormatForWebChat = void 0;
6
+ exports.setTabIndices = exports.setFocusOnSendBox = exports.setFocusOnElement = exports.preventFocusToMoveOutOfElement = exports.parseAdaptiveCardPayload = exports.newGuid = exports.isUndefinedOrEmpty = exports.isNullOrUndefined = exports.isNullOrEmptyString = exports.getWidgetEndChatEventName = exports.getWidgetCacheId = exports.getTimestampHourMinute = exports.getStateFromCache = exports.getLocaleDirection = exports.getIconText = exports.getDomain = exports.findParentFocusableElementsWithoutChildContainer = exports.findAllFocusableElement = exports.extractPreChatSurveyResponseValues = exports.escapeHtml = exports.createTimer = exports.changeLanguageCodeFormatForWebChat = exports.addDelayInMs = void 0;
7
7
 
8
8
  var _Constants = require("./Constants");
9
9
 
10
+ var _DataStoreManager = require("./contextDataStore/DataStoreManager");
11
+
10
12
  var _KeyCodes = require("./KeyCodes");
11
13
 
12
14
  var _TelemetryConstants = require("./telemetry/TelemetryConstants");
@@ -360,6 +362,50 @@ exports.getWidgetCacheId = getWidgetCacheId;
360
362
 
361
363
  const getWidgetEndChatEventName = (orgId, widgetId) => {
362
364
  return `${_TelemetryConstants.BroadcastEvent.ChatEnded}_${orgId}_${widgetId}`;
365
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
366
+
367
+
368
+ exports.getWidgetEndChatEventName = getWidgetEndChatEventName;
369
+
370
+ const getStateFromCache = (orgId, widgetId) => {
371
+ // Getting updated state from cache
372
+ try {
373
+ if (_DataStoreManager.DataStoreManager.clientDataStore) {
374
+ var _DataStoreManager$cli;
375
+
376
+ const widgetStateEventName = getWidgetCacheId(orgId, widgetId);
377
+ const widgetStateFromCache = (_DataStoreManager$cli = _DataStoreManager.DataStoreManager.clientDataStore) === null || _DataStoreManager$cli === void 0 ? void 0 : _DataStoreManager$cli.getData(widgetStateEventName, "localStorage");
378
+ const persistedState = widgetStateFromCache ? JSON.parse(widgetStateFromCache) : undefined;
379
+ return persistedState;
380
+ } else {
381
+ return null;
382
+ }
383
+ } catch (error) {
384
+ console.log(error);
385
+ return null;
386
+ }
387
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
388
+
389
+
390
+ exports.getStateFromCache = getStateFromCache;
391
+
392
+ const isUndefinedOrEmpty = object => {
393
+ if (object) {
394
+ if (Object.keys(object).length === 0) {
395
+ return true;
396
+ }
397
+
398
+ return false;
399
+ } else {
400
+ return true;
401
+ }
402
+ }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
403
+
404
+
405
+ exports.isUndefinedOrEmpty = isUndefinedOrEmpty;
406
+
407
+ const addDelayInMs = ms => {
408
+ return new Promise(resolve => setTimeout(resolve, ms));
363
409
  };
364
410
 
365
- exports.getWidgetEndChatEventName = getWidgetEndChatEventName;
411
+ exports.addDelayInMs = addDelayInMs;
@@ -82,6 +82,10 @@ const ChatButtonStateful = props => {
82
82
  titleText: "We're Offline",
83
83
  subtitleText: "No agents available",
84
84
  onClick: async () => {
85
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.INFO, {
86
+ Event: _TelemetryConstants.TelemetryEvent.LCWChatButtonClicked
87
+ });
88
+
85
89
  if (state.appStates.isMinimized) {
86
90
  dispatch({
87
91
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_MINIMIZED,
@@ -41,7 +41,6 @@ const ConfirmationPaneStateful = props => {
41
41
  const {
42
42
  prepareEndChat
43
43
  } = props; // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
44
 
46
45
  const [adapter] = (0, _useChatAdapterStore.default)();
47
46
  const controlProps = {
@@ -81,8 +81,8 @@ const HeaderStateful = props => {
81
81
  });
82
82
  },
83
83
  ...(headerProps === null || headerProps === void 0 ? void 0 : headerProps.controlProps),
84
- hideTitle: state.appStates.conversationState === _ConversationState.ConversationState.Loading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP = headerProps.controlProps) === null || _headerProps$controlP === void 0 ? void 0 : _headerProps$controlP.hideTitle),
85
- hideIcon: state.appStates.conversationState === _ConversationState.ConversationState.Loading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP2 = headerProps.controlProps) === null || _headerProps$controlP2 === void 0 ? void 0 : _headerProps$controlP2.hideIcon),
84
+ hideTitle: state.appStates.conversationState === _ConversationState.ConversationState.Loading || state.appStates.conversationState === _ConversationState.ConversationState.PostchatLoading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP = headerProps.controlProps) === null || _headerProps$controlP === void 0 ? void 0 : _headerProps$controlP.hideTitle),
85
+ hideIcon: state.appStates.conversationState === _ConversationState.ConversationState.Loading || state.appStates.conversationState === _ConversationState.ConversationState.PostchatLoading || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP2 = headerProps.controlProps) === null || _headerProps$controlP2 === void 0 ? void 0 : _headerProps$controlP2.hideIcon),
86
86
  hideCloseButton: state.appStates.conversationState === _ConversationState.ConversationState.Loading || state.appStates.conversationState === _ConversationState.ConversationState.Prechat || state.appStates.conversationState === _ConversationState.ConversationState.ReconnectChat || (headerProps === null || headerProps === void 0 ? void 0 : (_headerProps$controlP3 = headerProps.controlProps) === null || _headerProps$controlP3 === void 0 ? void 0 : _headerProps$controlP3.hideCloseButton)
87
87
  };
88
88
  const outOfOfficeControlProps = {
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DefaultActivitySubscriber = void 0;
7
+
8
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
9
+
10
+ class DefaultActivitySubscriber {
11
+ constructor() {
12
+ _defineProperty(this, "observer", void 0);
13
+ }
14
+
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ async next(activity) {
17
+ this.observer.next(activity);
18
+ return false;
19
+ }
20
+
21
+ }
22
+
23
+ exports.DefaultActivitySubscriber = DefaultActivitySubscriber;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ChatAdapterShim = void 0;
7
+
8
+ var _DefaultActivitySubscriber = require("./ActivitySubscriber/DefaultActivitySubscriber");
9
+
10
+ var _shareObservable = require("./shareObservable");
11
+
12
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
13
+
14
+ class ChatAdapterShim {
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ constructor(chatAdapter) {
20
+ _defineProperty(this, "chatAdapter", void 0);
21
+
22
+ _defineProperty(this, "activityObserver", void 0);
23
+
24
+ _defineProperty(this, "subscribers", void 0);
25
+
26
+ this.subscribers = [];
27
+ this.chatAdapter = { ...chatAdapter,
28
+ activity$: (0, _shareObservable.shareObservable)( // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ new window.Observable(observer => {
30
+ this.activityObserver = observer; // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
+
32
+ const abortController = new window.AbortController();
33
+
34
+ (async () => {
35
+ try {
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ for await (let activity of chatAdapter.activities({
38
+ signal: abortController.signal
39
+ })) {
40
+ for (const subscriber of [...this.subscribers, new _DefaultActivitySubscriber.DefaultActivitySubscriber()]) {
41
+ subscriber.observer = this.activityObserver;
42
+ activity = await subscriber.next(activity);
43
+
44
+ if (!activity) {
45
+ break;
46
+ }
47
+ }
48
+ }
49
+
50
+ observer.complete();
51
+ } catch (error) {
52
+ observer.error(error);
53
+ }
54
+ })();
55
+
56
+ return () => {
57
+ abortController.abort();
58
+ };
59
+ }))
60
+ };
61
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
+
63
+
64
+ addSubscriber(subscriber) {
65
+ this.subscribers.push(subscriber);
66
+ }
67
+
68
+ }
69
+
70
+ exports.ChatAdapterShim = ChatAdapterShim;
@@ -13,6 +13,8 @@ var _NotificationScenarios = require("../../webchatcontainerstateful/webchatcont
13
13
 
14
14
  var _defaultMiddlewareLocalizedTexts = require("../../webchatcontainerstateful/common/defaultProps/defaultMiddlewareLocalizedTexts");
15
15
 
16
+ var _ChatAdapterShim = require("./ChatAdapterShim");
17
+
16
18
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
17
19
  const createAdapter = async chatSDK => {
18
20
  const chatAdapterOptionalParams = {
@@ -34,7 +36,13 @@ const createAdapter = async chatSDK => {
34
36
  }
35
37
  }
36
38
  };
37
- return await chatSDK.createChatAdapter(chatAdapterOptionalParams);
39
+ let adapter = await chatSDK.createChatAdapter(chatAdapterOptionalParams); //so far, there is no need to convert to the shim adapter when using visual tests
40
+
41
+ if (chatSDK.isMockModeOn !== true) {
42
+ adapter = new _ChatAdapterShim.ChatAdapterShim(adapter);
43
+ }
44
+
45
+ return adapter;
38
46
  };
39
47
 
40
48
  exports.createAdapter = createAdapter;
@@ -26,26 +26,40 @@ const createMarkdown = (disableMarkdownMessageFormatting, disableNewLineMarkdown
26
26
  breaks: !disableNewLineMarkdownSupport
27
27
  }); // ToDo: Commenting below usage of plugin until deferred bug is resolved: https://github.com/mayashavin/markdown-it-slack/issues/1
28
28
  // markdown.use(MarkdownSlack);
29
- // Markdown override for open link in new tab
30
- // eslint-disable-next-line @typescript-eslint/no-explicit-any, quotes
29
+ } else {
30
+ markdown = new _markdownIt.default(_Constants.Constants.Zero, {
31
+ html: true,
32
+ linkify: true,
33
+ breaks: !disableNewLineMarkdownSupport
34
+ });
35
+ markdown.enable(["entity", // Rule to process html entity - {, ¯, "
36
+ "linkify", // Rule to replace link-like texts with link nodes
37
+ "html_block", // Rule to process html blocks and paragraphs
38
+ "html_inline", // Rule to process html tags
39
+ "newline" // Rule to proceess '\n'
40
+ ]);
41
+ } // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
42
 
32
- markdown.use(_markdownItForInline.default, "url_new_win", "link_open", function (tokens, idx, env) {
33
- const targetAttrIndex = tokens[idx].attrIndex(_Constants.Constants.Target); // Put a transparent pixel instead of the "open in new window" icon, so developers can easily modify the icon in CSS.
34
43
 
35
- const TRANSPARENT_GIF = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
44
+ markdown.use(_markdownItForInline.default, "url_new_win", "link_open", function (tokens, idx, env) {
45
+ const targetAttrIndex = tokens[idx].attrIndex(_Constants.Constants.Target); // Put a transparent pixel instead of the "open in new window" icon, so developers can easily modify the icon in CSS.
36
46
 
37
- if (~targetAttrIndex) {
38
- tokens[idx].attrs[targetAttrIndex][1] = _Constants.Constants.Blank;
39
- } else {
40
- tokens[idx].attrPush([_Constants.Constants.Target, _Constants.Constants.Blank]);
41
- }
47
+ const TRANSPARENT_GIF = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7";
48
+
49
+ if (~targetAttrIndex) {
50
+ tokens[idx].attrs[targetAttrIndex][1] = _Constants.Constants.Blank;
51
+ } else {
52
+ tokens[idx].attrPush([_Constants.Constants.Target, _Constants.Constants.Blank]);
53
+ }
54
+
55
+ const relAttrIndex = tokens[idx].attrIndex(_Constants.Constants.TargetRelationship);
42
56
 
43
- const relAttrIndex = tokens[idx].attrIndex(_Constants.Constants.TargetRelationship);
57
+ if (~relAttrIndex) {
58
+ tokens[idx].attrs[relAttrIndex][1] = _Constants.Constants.TargetRelationshipAttributes;
59
+ } else {
60
+ tokens[idx].attrPush([_Constants.Constants.TargetRelationship, _Constants.Constants.TargetRelationshipAttributes]);
44
61
 
45
- if (~relAttrIndex) {
46
- tokens[idx].attrs[relAttrIndex][1] = _Constants.Constants.TargetRelationshipAttributes;
47
- } else {
48
- tokens[idx].attrPush([_Constants.Constants.TargetRelationship, _Constants.Constants.TargetRelationshipAttributes]);
62
+ if (!disableMarkdownMessageFormatting) {
49
63
  tokens[idx].attrPush([_Constants.Constants.Title, _defaultMarkdownLocalizedTexts.defaultMarkdownLocalizedTexts.MARKDOWN_EXTERNAL_LINK_ALT]); // eslint-disable-next-line quotes
50
64
 
51
65
  const iconTokens = markdown.parseInline(`![${_defaultMarkdownLocalizedTexts.defaultMarkdownLocalizedTexts.MARKDOWN_EXTERNAL_LINK_ALT}](${TRANSPARENT_GIF})`, env)[0].children;
@@ -55,21 +69,8 @@ const createMarkdown = (disableMarkdownMessageFormatting, disableNewLineMarkdown
55
69
  tokens.splice(idx + 2, 0, ...iconTokens);
56
70
  }
57
71
  }
58
- });
59
- } else {
60
- markdown = new _markdownIt.default(_Constants.Constants.Zero, {
61
- html: true,
62
- linkify: true,
63
- breaks: !disableNewLineMarkdownSupport
64
- });
65
- markdown.enable(["entity", // Rule to process html entity - {, ¯, "
66
- "linkify", // Rule to replace link-like texts with link nodes
67
- "html_block", // Rule to process html blocks and paragraphs
68
- "html_inline", // Rule to process html tags
69
- "newline" // Rule to proceess '\n'
70
- ]);
71
- }
72
-
72
+ }
73
+ });
73
74
  return markdown;
74
75
  };
75
76
 
@@ -1434,7 +1434,6 @@ const dummyDefaultProps = {
1434
1434
  startNewChatButtonClassName: undefined
1435
1435
  }
1436
1436
  },
1437
- authClientFunction: undefined,
1438
1437
  isReconnectEnabled: undefined,
1439
1438
  reconnectId: undefined,
1440
1439
  redirectInSameWindow: undefined
@@ -1705,6 +1704,10 @@ const dummyDefaultProps = {
1705
1704
  fwdUrl: ""
1706
1705
  }
1707
1706
  },
1707
+ authProps: {
1708
+ authClientFunction: undefined,
1709
+ setAuthTokenProviderToChatSdk: undefined
1710
+ },
1708
1711
  telemetryConfig: undefined
1709
1712
  };
1710
1713
  exports.dummyDefaultProps = dummyDefaultProps;
@@ -27,18 +27,35 @@ var _utils = require("../../../common/utils");
27
27
 
28
28
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
29
  const prepareEndChat = async (props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, state) => {
30
- var _state$domainStates$l, _state$domainStates$l2, _state$domainStates$l3, _state$domainStates$l4;
30
+ var _state$domainStates$l, _state$domainStates$l2, _state$domainStates$l3, _state$domainStates$l4, _conversationDetails;
31
31
 
32
32
  const isPostChatEnabled = (_state$domainStates$l = state.domainStates.liveChatConfig) === null || _state$domainStates$l === void 0 ? void 0 : (_state$domainStates$l2 = _state$domainStates$l.LiveWSAndLiveChatEngJoin) === null || _state$domainStates$l2 === void 0 ? void 0 : _state$domainStates$l2.msdyn_postconversationsurveyenable;
33
- const postChatSurveyMode = (_state$domainStates$l3 = state.domainStates.liveChatConfig) === null || _state$domainStates$l3 === void 0 ? void 0 : (_state$domainStates$l4 = _state$domainStates$l3.LiveWSAndLiveChatEngJoin) === null || _state$domainStates$l4 === void 0 ? void 0 : _state$domainStates$l4.msdyn_postconversationsurveymode;
34
- const conversationDetails = await chatSDK.getConversationDetails();
33
+ const postChatSurveyMode = (_state$domainStates$l3 = state.domainStates.liveChatConfig) === null || _state$domainStates$l3 === void 0 ? void 0 : (_state$domainStates$l4 = _state$domainStates$l3.LiveWSAndLiveChatEngJoin) === null || _state$domainStates$l4 === void 0 ? void 0 : _state$domainStates$l4.msdyn_postconversationsurveymode; // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
34
 
36
- if (isPostChatEnabled === "true" && (conversationDetails === null || conversationDetails === void 0 ? void 0 : conversationDetails.canRenderPostChat) === _Constants.Constants.truePascal) {
35
+ let conversationDetails = undefined;
36
+
37
+ try {
38
+ conversationDetails = await chatSDK.getConversationDetails();
39
+ } catch (erorr) {
40
+ _TelemetryHelper.TelemetryHelper.logActionEvent(_TelemetryConstants.LogLevel.ERROR, {
41
+ Event: _TelemetryConstants.TelemetryEvent.GetConversationDetailsException,
42
+ ExceptionDetails: {
43
+ exception: `Failed to get conversation details: ${erorr}`
44
+ }
45
+ });
46
+ }
47
+
48
+ if (isPostChatEnabled === "true" && ((_conversationDetails = conversationDetails) === null || _conversationDetails === void 0 ? void 0 : _conversationDetails.canRenderPostChat) === _Constants.Constants.truePascal) {
37
49
  const skipEndChatSDK = false;
38
50
  const skipCloseChat = true;
39
51
  await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, skipEndChatSDK, skipCloseChat, true);
40
52
 
41
53
  if (postChatSurveyMode === _PostChatSurveyMode.PostChatSurveyMode.Embed) {
54
+ dispatch({
55
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
56
+ payload: _ConversationState.ConversationState.PostchatLoading
57
+ });
58
+ await (0, _utils.addDelayInMs)(_Constants.Constants.PostChatLoadingDurationInMs);
42
59
  const loadPostChatEvent = {
43
60
  eventName: _TelemetryConstants.BroadcastEvent.LoadPostChatSurvey
44
61
  };
@@ -50,9 +67,11 @@ const prepareEndChat = async (props, chatSDK, setAdapter, setWebChatStyles, disp
50
67
  payload: _ConversationState.ConversationState.InActive
51
68
  });
52
69
  }
53
- } else {
54
- await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, true);
70
+
71
+ return;
55
72
  }
73
+
74
+ await endChat(props, chatSDK, setAdapter, setWebChatStyles, dispatch, adapter, false, false, true);
56
75
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
57
76
 
58
77
 
@@ -65,16 +84,7 @@ const endChat = async (props, chatSDK, setAdapter, setWebChatStyles, dispatch, a
65
84
  Event: _TelemetryConstants.TelemetryEvent.EndChatSDKCall
66
85
  });
67
86
 
68
- await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat()); // Need to clear these states immediately when chat ended from OC.
69
-
70
- dispatch({
71
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CHAT_TOKEN,
72
- payload: undefined
73
- });
74
- dispatch({
75
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
76
- payload: undefined
77
- });
87
+ await (chatSDK === null || chatSDK === void 0 ? void 0 : chatSDK.endChat());
78
88
  } catch (ex) {
79
89
  _TelemetryHelper.TelemetryHelper.logSDKEvent(_TelemetryConstants.LogLevel.ERROR, {
80
90
  Event: _TelemetryConstants.TelemetryEvent.EndChatSDKCallFailed,
@@ -85,7 +95,21 @@ const endChat = async (props, chatSDK, setAdapter, setWebChatStyles, dispatch, a
85
95
 
86
96
  postMessageToOtherTab = false;
87
97
  }
88
- }
98
+ } // Need to clear these states immediately when chat ended from OC.
99
+
100
+
101
+ dispatch({
102
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CUSTOM_CONTEXT,
103
+ payload: undefined
104
+ });
105
+ dispatch({
106
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CHAT_TOKEN,
107
+ payload: undefined
108
+ });
109
+ dispatch({
110
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_LIVE_CHAT_CONTEXT,
111
+ payload: undefined
112
+ });
89
113
 
90
114
  if (!skipCloseChat) {
91
115
  try {
@@ -117,6 +141,14 @@ const endChat = async (props, chatSDK, setAdapter, setWebChatStyles, dispatch, a
117
141
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_UNREAD_MESSAGE_COUNT,
118
142
  payload: 0
119
143
  });
144
+ dispatch({
145
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_PROACTIVE_CHAT_PARAMS,
146
+ payload: {
147
+ proactiveChatBodyTitle: "",
148
+ proactiveChatEnablePrechat: false,
149
+ proactiveChatInNewWindow: false
150
+ }
151
+ });
120
152
 
121
153
  if (postMessageToOtherTab) {
122
154
  var _chatSDK$omnichannelC, _chatSDK$omnichannelC2;
@@ -67,6 +67,8 @@ var _cardActionMiddleware = require("../../webchatcontainerstateful/webchatcontr
67
67
 
68
68
  var _messageTimestampMiddleware = _interopRequireDefault(require("../../webchatcontainerstateful/webchatcontroller/middlewares/renderingmiddlewares/messageTimestampMiddleware"));
69
69
 
70
+ var _Constants = require("../../../common/Constants");
71
+
70
72
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
71
73
 
72
74
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -105,6 +107,12 @@ const initWebChatComposer = (props, chatSDK, state, dispatch, setWebChatStyles)
105
107
 
106
108
  if (isPostChatEnabled === "true") {
107
109
  if (postChatSurveyMode === _PostChatSurveyMode.PostChatSurveyMode.Embed) {
110
+ _WebChatStoreLoader.WebChatStoreLoader.store = null;
111
+ dispatch({
112
+ type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
113
+ payload: _ConversationState.ConversationState.PostchatLoading
114
+ });
115
+ await (0, _utils.addDelayInMs)(_Constants.Constants.PostChatLoadingDurationInMs);
108
116
  const loadPostChatEvent = {
109
117
  eventName: _TelemetryConstants.BroadcastEvent.LoadPostChatSurvey
110
118
  };
@@ -44,9 +44,9 @@ const getChatReconnectContext = async (chatSDK, reconnectId) => {
44
44
  exports.getChatReconnectContext = getChatReconnectContext;
45
45
 
46
46
  const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
47
- var _props$reconnectChatP, _props$reconnectChatP2;
47
+ var _props$reconnectChatP, _props$authProps;
48
48
 
49
- if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.isReconnectEnabled && (_props$reconnectChatP2 = props.reconnectChatPaneProps) !== null && _props$reconnectChatP2 !== void 0 && _props$reconnectChatP2.authClientFunction // TODO: Implement this after storage is in place
49
+ if ((_props$reconnectChatP = props.reconnectChatPaneProps) !== null && _props$reconnectChatP !== void 0 && _props$reconnectChatP.isReconnectEnabled && (_props$authProps = props.authProps) !== null && _props$authProps !== void 0 && _props$authProps.authClientFunction // TODO: Implement this after storage is in place
50
50
 
51
51
  /* && !isLoadWithState() */
52
52
  ) {
@@ -63,31 +63,31 @@ const getReconnectIdForAuthenticatedChat = async (props, chatSDK) => {
63
63
 
64
64
  exports.getReconnectIdForAuthenticatedChat = getReconnectIdForAuthenticatedChat;
65
65
 
66
- const handleUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
66
+ const handleUnauthenticatedReconnectChat = async (chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat, redirectInSameWindow) => {
67
67
  const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
68
68
 
69
69
  if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
70
- await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow);
70
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, authProps, dispatch, setAdapter, initStartChat, redirectInSameWindow);
71
71
  } else {
72
- await setReconnectIdAndStartChat(chatSDK, dispatch, setAdapter, reconnectId, initStartChat);
72
+ await setReconnectIdAndStartChat(chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat);
73
73
  }
74
74
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
75
75
 
76
76
 
77
77
  exports.handleUnauthenticatedReconnectChat = handleUnauthenticatedReconnectChat;
78
78
 
79
- const startUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat) => {
79
+ const startUnauthenticatedReconnectChat = async (chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat) => {
80
80
  const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
81
81
 
82
82
  if (!shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
83
- await setReconnectIdAndStartChat(chatSDK, dispatch, setAdapter, reconnectId, initStartChat);
83
+ await setReconnectIdAndStartChat(chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat);
84
84
  }
85
85
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
86
 
87
87
 
88
88
  exports.startUnauthenticatedReconnectChat = startUnauthenticatedReconnectChat;
89
89
 
90
- const setReconnectIdAndStartChat = async (chatSDK, dispatch, setAdapter, reconnectId, initStartChat) => {
90
+ const setReconnectIdAndStartChat = async (chatSDK, authProps, dispatch, setAdapter, reconnectId, initStartChat) => {
91
91
  const startUnauthenticatedReconnectChat = {
92
92
  eventName: _TelemetryConstants.BroadcastEvent.StartUnauthenticatedReconnectChat
93
93
  };
@@ -105,7 +105,7 @@ const setReconnectIdAndStartChat = async (chatSDK, dispatch, setAdapter, reconne
105
105
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
106
106
  payload: _ConversationState.ConversationState.Loading
107
107
  });
108
- await initStartChat(chatSDK, dispatch, setAdapter, optionalParams);
108
+ await initStartChat(chatSDK, authProps, dispatch, setAdapter, optionalParams);
109
109
  };
110
110
 
111
111
  const redirectPage = (redirectURL, redirectInSameWindow) => {
@@ -128,7 +128,7 @@ const shouldRedirectOrStartNewChat = reconnectAvailabilityResponse => {
128
128
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
129
129
 
130
130
 
131
- const startNewChatEmptyRedirectionUrl = async (chatSDK, dispatch, setAdapter, initStartChat) => {
131
+ const startNewChatEmptyRedirectionUrl = async (chatSDK, authProps, dispatch, setAdapter, initStartChat) => {
132
132
  const startUnauthenticatedReconnectChat = {
133
133
  eventName: _TelemetryConstants.BroadcastEvent.StartUnauthenticatedReconnectChat
134
134
  };
@@ -153,26 +153,26 @@ const startNewChatEmptyRedirectionUrl = async (chatSDK, dispatch, setAdapter, in
153
153
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
154
154
  payload: _ConversationState.ConversationState.Loading
155
155
  });
156
- await initStartChat(chatSDK, dispatch, setAdapter);
156
+ await initStartChat(chatSDK, authProps, dispatch, setAdapter);
157
157
  }
158
158
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
159
159
 
160
160
 
161
- const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
161
+ const handleRedirectUnauthenticatedReconnectChat = async (chatSDK, authProps, dispatch, setAdapter, initStartChat, reconnectId, redirectInSameWindow) => {
162
162
  const reconnectAvailabilityResponse = await getChatReconnectContext(chatSDK, reconnectId);
163
163
 
164
164
  if (shouldRedirectOrStartNewChat(reconnectAvailabilityResponse)) {
165
- await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow);
165
+ await redirectOrStartNewChat(reconnectAvailabilityResponse, chatSDK, authProps, dispatch, setAdapter, initStartChat, redirectInSameWindow);
166
166
  }
167
167
  }; // eslint-disable-next-line @typescript-eslint/no-explicit-any
168
168
 
169
169
 
170
170
  exports.handleRedirectUnauthenticatedReconnectChat = handleRedirectUnauthenticatedReconnectChat;
171
171
 
172
- const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
172
+ const redirectOrStartNewChat = async (reconnectAvailabilityResponse, chatSDK, authProps, dispatch, setAdapter, initStartChat, redirectInSameWindow) => {
173
173
  if (reconnectAvailabilityResponse.redirectURL) {
174
174
  redirectPage(reconnectAvailabilityResponse.redirectURL, redirectInSameWindow);
175
175
  } else {
176
- await startNewChatEmptyRedirectionUrl(chatSDK, dispatch, setAdapter, initStartChat);
176
+ await startNewChatEmptyRedirectionUrl(chatSDK, authProps, dispatch, setAdapter, initStartChat);
177
177
  }
178
178
  };
@@ -43,10 +43,6 @@ const setPostChatContextAndLoadSurvey = async (chatSDK, dispatch, persistedChat)
43
43
 
44
44
 
45
45
  _omnichannelChatComponents.BroadcastService.getMessageByEventName("LoadPostChatSurvey").subscribe(msg => {
46
- dispatch({
47
- type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
48
- payload: _ConversationState.ConversationState.Loading
49
- });
50
46
  dispatch({
51
47
  type: _LiveChatWidgetActionType.LiveChatWidgetActionType.SET_CONVERSATION_STATE,
52
48
  payload: _ConversationState.ConversationState.Postchat
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.shareObservable = shareObservable;
7
+
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ function shareObservable(observable) {
10
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
+ let observers = []; // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+
13
+ let subscription; // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
+
15
+ return new window.Observable(observer => {
16
+ if (!subscription) {
17
+ subscription = observable.subscribe({
18
+ complete() {
19
+ observers.forEach(observer => observer.complete());
20
+ },
21
+
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ error(err) {
24
+ observers.forEach(observer => observer.error(err));
25
+ },
26
+
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ next(value) {
29
+ observers.forEach(observer => observer.next(value));
30
+ }
31
+
32
+ });
33
+ }
34
+
35
+ observers.push(observer);
36
+ return () => {
37
+ observers = observers.filter(o => o !== observer);
38
+
39
+ if (!observers.length) {
40
+ subscription.unsubscribe();
41
+ subscription = null;
42
+ }
43
+ };
44
+ });
45
+ }